package br.com.gip.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import org.richfaces.component.html.HtmlDataTable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.gip.business.CargoBusiness;
import br.com.gip.business.DepartamentoBusiness;
import br.com.gip.business.UsuarioBusiness;
import br.com.gip.constant.Status;
import br.com.gip.repository.model.Artefato;
import br.com.gip.repository.model.Cargo;
import br.com.gip.repository.model.Departamento;
import br.com.gip.repository.model.PerfilAcesso;
import br.com.gip.repository.model.Usuario;

@Scope("session")
@Controller("usuarioController")
public class UsuarioController implements Serializable {

	private static final long serialVersionUID = -5187022366348987857L;

	@Autowired
	private CargoBusiness cargoBusiness;
	
	@Autowired
	private UsuarioBusiness usuarioBusiness;
	
	@Autowired
	private DepartamentoBusiness departamentoBusiness;

	private Usuario usuario;

	private List<Usuario> usuarios;
	
	private HtmlDataTable dataTable;
	
	public String cadastro() {
		this.usuario = new Usuario();
		return "cadatro-usuario";
	}

	public String lista() {
		this.usuario = new Usuario();
		this.usuarios = new ArrayList<Usuario>();
		return "lista-usuarios";
	}
	
	public String cadastrarUsuario() {
		this.usuarioBusiness.salvarUsuario(this.usuario);
		this.usuario = new Usuario();
		this.usuarios = this.usuarioBusiness.buscarUsuarios();
		return "cadatro-usuario-sucesso";
	}
	
	public String consultarUusarios() {
		this.usuario = new Usuario();
		this.usuarios = this.usuarioBusiness.buscarUsuario(this.usuario.getNome(),this.usuario.getDepartamento().getDepartamentoId(), this.usuario.getCargo().getCargoId());
		return "lista-usuarios";
	}

	public String editarUsuario() {
		this.usuario = (Usuario) this.dataTable.getRowData();
		return "editar-usuario";
	}

	public String removerUsuario() {
		this.usuarioBusiness.reomoverUsuario((Usuario) this.dataTable.getRowData());
		this.usuarios = this.usuarioBusiness.buscarUsuarios();
		this.usuario = new Usuario();
		return "delete-usuario-sucesso";
	}
	
	public SelectItem[] getAllDepartamentos() {
		List<SelectItem> itens = new ArrayList<SelectItem>();
		
		itens.add(new SelectItem("", "Selecione"));
		for (Departamento departamento : this.departamentoBusiness.buscarDepartamentos()) {
			itens.add(new SelectItem(departamento.getDepartamentoId(), departamento.getNome()));
		}

		return itens.toArray(new SelectItem[itens.size()]);
	}

	public SelectItem[] getAllCargos() {
		List<SelectItem> itens = new ArrayList<SelectItem>();
		
		itens.add(new SelectItem("", "Selecione"));
		for (Cargo cargo : this.cargoBusiness.buscarCargos()) {
			itens.add(new SelectItem(cargo.getCargoId(), cargo.getFuncao()));
		}

		return itens.toArray(new SelectItem[itens.size()]);
	}

	public SelectItem[] getAllPerfis() {
		List<SelectItem> itens = new ArrayList<SelectItem>();
		
		itens.add(new SelectItem("", "Selecione"));
		for (PerfilAcesso perfilAcesso : this.usuarioBusiness.buscarPerfisAcesso()) {
			itens.add(new SelectItem(perfilAcesso.getPerfilAcessoId(), perfilAcesso.getPerfil()));
		}

		return itens.toArray(new SelectItem[itens.size()]);
	}

	public SelectItem[] getAllStatus() {
		List<SelectItem> itens = new ArrayList<SelectItem>();
		
		itens.add(new SelectItem("", "Selecione"));
		for (Status status : Status.values()) {
			itens.add(new SelectItem(status.name(), status.getDescricao()));
		}

		return itens.toArray(new SelectItem[itens.size()]);
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public HtmlDataTable getDataTable() {
		return dataTable;
	}

	public void setDataTable(HtmlDataTable dataTable) {
		this.dataTable = dataTable;
	}

	public CargoBusiness getCargoBusiness() {
		return cargoBusiness;
	}

	public void setCargoBusiness(CargoBusiness cargoBusiness) {
		this.cargoBusiness = cargoBusiness;
	}

	public UsuarioBusiness getUsuarioBusiness() {
		return usuarioBusiness;
	}

	public void setUsuarioBusiness(UsuarioBusiness usuarioBusiness) {
		this.usuarioBusiness = usuarioBusiness;
	}

	public DepartamentoBusiness getDepartamentoBusiness() {
		return departamentoBusiness;
	}

	public void setDepartamentoBusiness(DepartamentoBusiness departamentoBusiness) {
		this.departamentoBusiness = departamentoBusiness;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	
	

}
